//
// Created by fairy on 2025/7/8.
//
#include <usart.hpp>

// ================== 中断处理连接 ==================
extern "C"
{
/**
     * @brief USART1中断服务函数
     */
void USART1_IRQHandler()
{
    hal::usart::handle_idle_irq();
    HAL_UART_IRQHandler(hal::usart::get_uart_handle());
}

/**
     * @brief DMA发送流中断服务函数
     */
void DMA2_Stream2_IRQHandler(void)
{
    HAL_DMA_IRQHandler(hal::usart::get_dma_rx_handle());
}

/**
  * @brief This function handles DMA2 stream7 global interrupt.
  */
void DMA2_Stream7_IRQHandler(void)
{
    HAL_DMA_IRQHandler(hal::usart::get_dma_tx_handle());
}
}

// ================== 标准输出重定向 ==================
extern "C"
{
#ifndef ENABLE_DEBUG
/**
     * @brief GCC标准输出重定向
     */
int _write(int fd, char *ptr, int len)
{
    hal::usart::send(ptr, len);
    return len;
}
#endif

/**
     * @brief 标准库字符输出重定向
     */
int fputc(int ch, FILE *f)
{
    HAL_UART_Transmit(hal::usart::get_uart_handle(), reinterpret_cast<uint8_t *>(&ch), 1, 0xFFFF);
    return ch;
}
}
